home *** CD-ROM | disk | FTP | other *** search
- #ifndef __tsmUtl__
- #include "tsmUtl.h"
- #endif
-
- #ifndef __GESTALT__
- #include "Gestalt.h"
- #endif
-
- #ifndef _TEMPITER_
- #include "TempIter.h"
- #endif
-
- #ifndef _FOCUSLIB_
- #include "FocusLib.h"
- #endif
-
- struct PASSTR {
- unsigned char len;
- unsigned char ptr[];
- };
-
- void tsmIdle(Environment* ev, tsmUtlRec *gGlobals)
- {
- if(gGlobals->fTEHandle != kODNULL){
- TEIdle(gGlobals->fTEHandle);
- }
- }
-
- void tsmDraw(Environment* ev, tsmUtlRec *gGlobals, ODFacet* facet)
- {
- GrafPtr saveport;
- GetPort(&saveport);
-
- // get frame shape
- ODFrame* frame = facet->GetFrame(ev);
- ODCanvas* biasCanvas = facet->GetCanvas(ev);
-
- GrafPtr port = biasCanvas->GetQDPort(ev);
- SetPort(port);
-
- TempODShape frameShape = frame->AcquireFrameShape(ev, biasCanvas);
- ODRgnHandle frameRgn = frameShape->GetQDRegion(ev);
- Rect bounds = (**frameRgn).rgnBBox;
-
- PenState penState;
- GetPenState(&penState);
- PenNormal();
- TextSize(FontSize);
- TextFont(FontKind);
-
- PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
- short align = teFlushDefault;
- TETextBox(pstr->ptr, pstr->len, &bounds, align);
-
- SetPenState(&penState);
- SetPort(saveport);
- }
-
- void tsmOpen(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame)
- {
- GrafPtr saveport;
- GetPort(&saveport);
-
- // get first facet from frame.
- CFrameInfo* frameInfo = (CFrameInfo*) frame->GetPartInfo(ev);
- TempODFrameFacetIterator fiter(ev, frame);
- ODFacet* facet = fiter.First();
- if(facet == kODNULL) return;
-
- // get frame shape
- ODCanvas* biasCanvas = facet->GetCanvas(ev);
- TempODShape frameShape = frame->AcquireFrameShape(ev, biasCanvas);
- ODRgnHandle frameRgn = frameShape->GetQDRegion(ev);
- Rect bounds = (**frameRgn).rgnBBox;
-
- GrafPtr port = biasCanvas->GetQDPort(ev);
- SetPort(port);
-
- // get facet offset from window
- ODTransform *localToGlobal = facet->AcquireContentTransform(ev, kODNULL);
- ODPoint offset(0,0);
- localToGlobal->TransformPoint(ev, &offset);
- OffsetRect(&bounds, offset.IntX(), offset.IntY());
-
- PenState penState;
- GetPenState(&penState);
- PenNormal();
- TextSize(FontSize);
- TextFont(FontKind);
-
- if(gGlobals->fTEHandle == kODNULL){
-
- // DebugStr("\ptsmOpen : Called while TE is not activated");
- #ifdef debug
- SysBeep(1);
- #endif
-
- gGlobals->fTEHandle = TENew(&bounds, &bounds);
-
- if (gGlobals->fHaveTSMTE == kODTrue) {
- OSErr err;
- OSType interfaceTypes[]= {kTSMTEInterfaceType};
-
- if(gGlobals->fHaveShareTSMlib == kODTrue)
- err = ODNewTSMDocumentForPart(1, interfaceTypes, &gGlobals->fTSMDocID, (long)&gGlobals->fTSMTEHandle);
- else
- err = NewTSMDocument(1, interfaceTypes, &gGlobals->fTSMDocID, (long)&gGlobals->fTSMTEHandle);
- if (err == noErr) {
- (*gGlobals->fTSMTEHandle)->textH = gGlobals->fTEHandle;
- (*gGlobals->fTSMTEHandle)->preUpdateProc = kODNULL;
- (*gGlobals->fTSMTEHandle)->postUpdateProc = kODNULL;
- (*gGlobals->fTSMTEHandle)->updateFlag = kTSMTEAutoScroll;
- (*gGlobals->fTSMTEHandle)->refCon = kODNULL;
- UseInputWindow(kODNULL, kODFalse);
- }
- }
-
- PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
- TESetText(pstr->ptr, pstr->len, gGlobals->fTEHandle);
- // TESetSelect(0, 0, gGlobals->fTEHandle);
-
- if (gGlobals->fHaveTSMTE == kODTrue){
- if(gGlobals->fHaveShareTSMlib == kODTrue){
- OSType interfaceTypes[]= {kTSMTEInterfaceType};
- ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
- }
- ActivateTSMDocument(gGlobals->fTSMDocID);
- }
- TEActivate(gGlobals->fTEHandle);
- }
- else
- DebugStr("\ptsmOpen : Called while TE is activated");
-
- TEUpdate(&bounds, gGlobals->fTEHandle);
-
- SetPenState(&penState);
- SetPort(saveport);
-
- localToGlobal->Release(ev);
- }
-
- void tsmClose(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame)
- {
- #ifdef debug
- SysBeep(1);
- SysBeep(1);
- #endif
-
- PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
- Handle hd;
- GrafPtr port;
-
- GetPort(&port);
- if(gGlobals->fTEHandle != kODNULL){
- // DebugStr("\ptsmClose : Called while TE is activated");
- if (gGlobals->fHaveTSMTE == kODTrue){
- if(gGlobals->fHaveShareTSMlib == kODTrue){
- OSType interfaceTypes[]= {kTSMTEInterfaceType};
- ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
- }
- DeactivateTSMDocument(gGlobals->fTSMDocID);
- }
- hd = TEGetText(gGlobals->fTEHandle);
- pstr->len = (*gGlobals->fTEHandle)->teLength;
- if(pstr->len > 255) pstr->len = 255;
- if(pstr->len > 0){
- HLock(hd);
- BlockMove(*hd, pstr->ptr, pstr->len);
- HUnlock(hd);
- }
- TEDeactivate(gGlobals->fTEHandle);
- if(gGlobals->fHaveTSMTE == kODTrue){
- if(gGlobals->fHaveShareTSMlib == kODTrue){
- OSType interfaceTypes[]= {kTSMTEInterfaceType};
- ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
- ODDeleteTSMDocumentForPart(gGlobals->fTSMDocID);
- }
- else
- DeleteTSMDocument(gGlobals->fTSMDocID);
- }
- TEDispose(gGlobals->fTEHandle);
- gGlobals->fTEHandle = kODNULL;
- }
- // else
- // DebugStr("\ptsmClose : Called while TE is not activated");
- SetPort(port);
- }
-
- void tsmKey(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame, ODEventData* event)
- {
- GrafPtr port;
-
- GetPort(&port);
- if(gGlobals->fTEHandle != kODNULL){
- // Just private scrap support by CmdKey.
- // You must support ExternalScrap, EditMenu, AjustMenu, Storage, Drag&Drop...
- if(event->modifiers & cmdKey){
- switch(event->message & charCodeMask){
- case 'c': TECopy(gGlobals->fTEHandle); break;
- case 'x': TECut(gGlobals->fTEHandle); break;
- case 'v': TEPaste(gGlobals->fTEHandle); break;
- default: break;
- }
- }
- else
- TEKey(event->message & charCodeMask, gGlobals->fTEHandle);
- }
- else
- DebugStr("\ptsmKey : Got key while TE is not activated");
- SetPort(port);
- }
-
- void tsmCheck(tsmUtlRec *gGlobals)
- {
- long result;
- if (::Gestalt(kTSMTESignature, &result) == noErr
- && (result & (1 << gestaltTSMTE)) != 0){
- if ((Ptr)ODUseTSMDocumentForPart == (Ptr)nil){
- gGlobals->fHaveShareTSMlib = kODFalse;
- }
- else{
- gGlobals->fHaveShareTSMlib = kODTrue;
- }
- gGlobals->fHaveTSMTE = kODTrue;
- }
- else{
- gGlobals->fHaveTSMTE = kODFalse;
- }
- }
-
- void tsmClick(Environment* ev, tsmUtlRec *gGlobals, ODFacet* facet, Point *where, ODEventData* event)
- {
- GrafPtr port;
-
- GetPort(&port);
- if(gGlobals->fTEHandle != kODNULL){
- TEClick(*where, (event->modifiers & shiftKey) != 0 ? true : false, gGlobals->fTEHandle);
- }
- // else
- // DebugStr("\ptsmClick : Called while TE is not activated");
-
- SetPort(port);
- }
-